“La conciencia es el Sistema Operativo” (Gregg Braden)
Sistema Operativo
Concepto
Un sistema operativo es una plataforma software, segura y eficiente, que actúa como intermediaria entre los usuarios (y sus aplicaciones) y los recursos hardware del sistema. Esta plataforma consta de un conjunto de procesos concurrentes, orientados a gestionar diferentes tareas. Los primeros sistemas concurrentes fueron los propios sistemas operativos.
Aunque los primeros sistemas operativos eran bastante simples (eran monousuario y monotarea), históricamente se han ido generalizando y enriqueciendo progresivamente con funcionalidades cada vez más avanzadas y de mayor abstracción: interfaces gráficos de usuario, navegador, sistemas de comunicación, etc. Esto ha producido como resultado sistemas operativos cada vez más complejos (multiusuario, multitarea y distribuidos). Además, diferentes casas comerciales han desarrollado sistemas operativos específicos para sus sistemas, ocultando en gran medida su estructura interna.
Estructura de un Sistema Operativo
Un sistema operativo se compone básicamente de tres capas funcionales:
El núcleo (kernel).
Es la capa más cercana al hardware. Gestiona directamente los recursos físicos (procesador, memoria, periféricos, etc.) .
La capa de servicios.
Proporciona una interfaz de programación para las aplicaciones, presentando los recursos disponibles en forma de máquina abstracta o virtual, ocultando los detalles del hardware para facilitar los desarrollos. Entre los servicios están:
Gestión de procesos (crear, eliminar, arrancar, parar, bloquear, desbloquear, finalizar, sincronizar, asignar recursos, comunicar procesos). Cuando un programa se ejecuta, se convierte en uno o varios procesos.
Gestión de la entrada/salida (leer, escribir, etc.).
Gestión de bases de datos. Este servicio puede aparecer como un sistema independiente.
Gestión de errores (de entrada/salida, de ejecución, de programación, etc.).
Gestión de la seguridad y privacidad.
El interfaz de usuario.
Es el intermediario entre el usuario y las aplicaciones, para la comunicación interactiva usuario-ordenador. Puede ser un intérprete de comandos (shell) o una interface gráfica de usuario (Graphical User Interface, GUI). En el caso de comandos, normalmente existe un lenguaje de guiones (scripts) para facilitar el desarrollo de meta-aplicaciones, es decir, aplicaciones basadas en aplicaciones.
Problemas de los actuales sistemas operativos
Diversidad de sistemas operativos.
Como ocurre con los lenguajes de programación, aunque en menor medida, hay una torre de Babel de sistemas operativos. No hay un sistema operativo estándar, aunque hay varios estándares de facto.
Falta de fundamentación.
No hay un modelo o paradigma semántico claro, universal que fundamente a todos los sistemas operativos.
Disociación entre el sistema operativo y el lenguaje de desarrollo.
Un sistema operativo es un conjunto de programas (o componentes software) que están desarrollados en un determinado lenguaje de programación. Normalmente, el sistema operativo no tiene un lenguaje base asociado (el lenguaje de desarrollo puede ser cualquiera), aunque existen algunos lenguajes que se concibieron para ser a la vez sistema operativo y lenguaje de programación, como Forth, Smalltalk, Cedar, UCSD Pascal, Oberon, MUMPS y Java [ver Adenda].
Complejidad.
Los sistemas operativos actuales son muy complejos y sofisticados, incluyendo los aparentemente más simples, como Linux. Complejidad debida fundamentalmente a la propia complejidad del lenguaje de desarrollo. Como consecuencia de dicha complejidad, la implementación es muy costosa, lo que implica poca seguridad y poca fiabilidad por la posibilidad de errores.
Poca transparencia.
Los sistemas operativos son poco o nada trasparentes. Por razones comerciales, la mayor parte de su estructura interna está oculta, incluyendo el código fuente, que suele ser críptico. Pocos sistemas operativos son abiertos, es decir, modificables y extensibles.
Poca estabilidad.
Existe una exigencia de actualización continua de los sistemas operativos por parte de los fabricantes. No hay una justificación clara respecto a este tema, es decir, si se trata de errores, mejoras, rediseño, etc.
No hay una separación conceptual clara entre el núcleo y la capa de servicios. Es decir, no está claro que es lo que debe ser nuclear (que es sinónimo de esencial) y qué debe ser servicio. Por razones de rendimiento, algunas funcionalidades de servicios se sitúan en el núcleo, desvirtuando el concepto de núcleo.
Falta de reusabilidad integral.
Los recursos disponibles, reutilizables por todas las aplicaciones, están limitados principalmente a un conjunto de módulos o subrutinas.
Dicotomía entre el sistema operativo y el sistema de gestión de base de datos.
Hay una separación entre el sistema operativo y el sistema de gestión de bases de datos. Deberían estar unificados.
Falta de soporte descriptivo.
La propia denominación de “sistema operativo” revela ya limitaciones. Es decir, parece que se restringe a temas operativos, sin cubrir los aspectos descriptivos.
MENTAL como Sistema Operativo-Descriptivo Universal
MENTAL se puede considerar, a nivel conceptual, el núcleo conceptual universal de todos los sistemas operativos, el sistema operativo universal, en principio monousuario y multitarea (por su soporte de concurrencia). El núcleo conceptual es el conjunto formado por las 12 primitivas semánticas universales, que cumplen las propiedades:
Constituyen el verdadero fundamento de todo sistema, su esencia. Es el núcleo esencial.
Corresponden a arquetipos primarios o dimensiones de la conciencia que fundamentan todo el software.
Son invariables e inmutables.
Son operativos y descriptivos.
MENTAL, por lo tanto, es un lenguaje y una plataforma semántica que necesita 3 elementos para su implantación.
El intérprete de MENTAL. Realiza la evaluación o ejecución de expresiones.
El entorno. Es el espacio abstracto en el que residen las expresiones y que sirve como sistema universal de comunicación entre usuarios, aplicaciones, periféricos y otros sistemas. Se implementa como memoria.
El kernel, que es la implementación física del núcleo conceptual.
Ventajas
Con MENTAL como núcleo de sistema operativo universal, desaparecen todos los problemas reseñados de los sistemas operativos tradicionales:
Fundamentación profunda y simple.
MENTAL es el núcleo común a todos los sistemas operativos. Todos los sistemas operativos se fundamentan en el mismo núcleo común. Puede haber diversidad de sistemas operativos (como hay diversidad de lenguajes) pero todos comparten el mismo núcleo. Es un núcleo universal.
Desarrollar aplicaciones (incluyendo la capa de servicios del sistema operativo) desde un nivel superficial no tiene sentido. Hay que basarse en lo profundo, pues desde ese nivel todo es más sencillo, más potente, más efectivo, más creativo, hay más libertad, donde compresión y comprensión es máxima, porque en ese nivel todo está conectado. El verdadero poder reside en lo profundo, porque es acercarse a la conciencia pura, el campo de todas las posibilidades.
Hay unificación en diversos aspectos:
Unificación entre el sistema operativo, el lenguaje y el sistema de gestión de base de datos.
Unificación en el desarrollo de nuevos lenguajes, el desarrollo de aplicaciones y las aplicaciones del sistema operativo (capa de servicios).
Unificación entre variables, archivos, directorios y bases de datos. Los datos creados y gestionados por las aplicaciones “persisten”. No se necesitan sistemas específicos de gestión de este tipo de estructuras, pues los propios recursos semánticos del lenguaje facilitan dicha gestión.
Unifica la comunicación, con el usuario, entre procesos y entre sistemas distribuidos, a través de un mecanismo muy simple, como es la interacción a través del entorno.
Simplicidad.
El sistema operativo, de la misma forma que como lenguaje, representa la máxima simplicidad. La máxima simplicidad se logra con la máxima profundidad. Y a partir de la simplicidad se construye la complejidad.
Se minimiza la implementación, pues solo hay que implementar el núcleo constituida por las primitivas semánticas universales.
Transparencia.
El código correspondiente a la capa de servicios está visible.
Abierto, modificable y extensible.
El sistema operativo es abierto, modificable y extensible en todo tipo de expresiones: estructuras de datos, definiciones, programas, lenguajes derivados, etc. Todo desarrollo es una extensión del lenguaje y del sistema operativo.
Estabilidad.
Frente a la exigencia de actualización continua de los sistemas operativos tradicionales, habría un núcleo fijo y estable.
Separación conceptual clara entre el núcleo y la capa de servicios.
El núcleo es el intérprete de MENTAL, es decir, de las primitivas.
Humanismo.
Si queremos que un ordenador evolucione hacia la emulación de las funciones mentales humanas, necesita una base semántica como la proporcionada por MENTAL. Lenguaje y sistema operativo son un modelo de la mente humana.
Reusabilidad integral.
Las expresiones del sistema de todo tipo (datos y código) son reusables por todas las aplicaciones, con lo que el sistema completo tiene mayor coherencia.
Soporte descriptivo.
Por su carácter universal, MENTAL va más allá del tradicional sistema operativo de ordenador, pues no es solo operativo sino que tiene también capacidad descriptiva.
Además de superar las limitaciones apuntadas, hay toda una serie de ventajas añadidas derivadas de las propias capacidades del lenguaje, entre ellas:
Portabilidad.
El código MENTAL, por su carácter compacto, puede actuar como código universal de intercambio entre diferentes sistemas.
No hay código objeto.
El código objeto es el fuente, pues el código MENTAL es muy compacto (no existen palabras clave, solo símbolos).
Sistema operativo multiparadigma.
Permite, como el lenguaje, expresar todo tipo de paradigmas: procedimientos, funciones, objetos, reglas, aspectos, agentes, etc.
Máxima sensibilidad.
Pequeños cambios a nivel profundo pueden producir grandes cambios en todo el software del sistema (en la capa de servicios y en las aplicaciones convencionales).
El soporte de concurrencia y paralelismo está en el propio lenguaje, mediante la primitiva “conjunto”, en este caso, conjunción de procesos.
Se pueden asignar atributos (metadatos) a todo tipo de expresiones.
Permite parametrizar toda clase de expresiones, facilitando su generalización.
Orientación a expresiones.
Pueden especificarse expresiones aritméticas, algebraicas, lógicas, etc.
Reglas y expresiones reflexivas.
Se pueden especificar fácilmente reglas (expresiones genéricas) para detección de errores, para el control de accesos, para almacenamiento de datos, etc.
Al permitir reflexión, se pueden crear procesos que gestionan o monitorizan procesos. La capacidad reflexiva permite observar, monitorizar y controlar la ejecución de aplicaciones, y también controlar los datos.
Expresiones virtuales.
Pueden crearse expresiones virtuales para definir aspectos o visiones particulares, en servidores, en red, etc. Se pueden definir expresiones virtuales de los diferentes recursos (programas, componentes, procesos, ficheros, entorno, etc.).
Expresiones de orden superior.
Pueden especificarse expresiones de orden superior en grupos (conjuntos o secuencias), atributos, expresiones genéricas, virtuales, reflexivas, imaginarias, etc.
Entrada/Salida
MENTAL no tiene instrucciones de entrada/salida, pues su carácter universal no le permite gestionar dispositivos específicos de ningún tipo. Aún así, es posible hacer generalizaciones respecto a las unidades de entrada/salida como elementos de comunicación con el mundo exterior.
Como en la comunicación entre procesos, la comunicación entre el sistema y el usuario se realiza a través del entorno, en dos áreas predefinidas:
ENTRADA.
Un área del entorno modificable por el usuario y accesible por la aplicación.
Para detectar la existencia de datos de entrada, se utiliza una expresión genérica que especifica el evento asociado a la existencia de datos de entrada y la acción a realizar:
〈(ENTRADA → acción)〉
Inicialmente,
(ENTRADA = θ)
Una vez realizada la acción asociada, entonces se restaura (se le vuelve a asignar el valor nulo).
Por lo tanto, los usuarios se pueden tratar como eventos de tipo externo que tienen su reflejo en lo interno (en el entorno).
SALIDA.
Un área del entorno modificable por la aplicación y visualizable por el usuario.
Para escribir:
(SALIDA = expresión)
Se puede leer o escribir cualquier expresión MENTAL, con lo que hay unificación entre datos y código también en este aspecto.
En general, una unidad de entrada/salida es como función dinámica. Una función dinámica es una función cuyo resultado (o acción) depende de la entrada (los argumentos) y de su estado interno. Los parámetros pueden ser posicionales o tener nombre.
En el caso de que se desee que los datos de salida tengan algún atributo como color, tamaño, subrayado, parpadeo, cursiva, negrita, etc., entonces se pueden especificar atributos que tendrá que interpretar el dispositivo de salida. Por ejemplo, "texto"/(color/rojo).
Adenda
Forth
Inventado por Charles (Chuck) H. Moore, es un lenguaje de programación y un sistema operativo. Es también un nuevo paradigma y una filosofía. Forth fue la respuesta personal de su autor a su frustración con la multitud de lenguajes de programación existentes entonces. Su idea fue crear un lenguaje simple, pequeño, claro, flexible y extensible, y crear la combinación más simple y efectiva de hardware y software, de tal forma que Forth fuera el lenguaje ensamblador de la máquina.
Características como lenguaje:
Simplicidad. Es el resultado de la búsqueda de un lenguaje lo más simple y pequeño posible. Es un lenguaje minimalista.
Tiene base semántica, con un conjunto de primitivas.
Es flexible y extensible.
Las aplicaciones son extensiones del lenguaje.
Es interactivo, potente, fiable y compacto.
Es un lenguaje apto para aplicaciones de alto y de bajo nivel.
Es muy fácil de aprender y usar.
Permite modularizar o factorizar aplicaciones fácilmente.
La sintaxis es simple. Utiliza la notación polaca inversa para las operaciones aritméticas (primero se especifican los argumentos y luego el operador). Ello evita la utilización de paréntesis y permite controlar el orden de ejecución. Por ejemplo, (a+b)*(c+d) es, en notación polaca inversa, ab+cd+*.
La última versión de Forth, llamada “colorForth” utiliza el color como elemento de la sintaxis, en lugar de signos de puntuación.
Una estructura de datos se trata como un programa ejecutable. Se diluye la distinción entre datos y aplicaciones.
El estilo es iterativo.
Utiliza dos pilas (stacks): una para datos y otra para control (con las direcciones de retorno).
Utiliza muchas palabras clave, al contrario que otros lenguajes (como Algol), que usan pocas palabras clave, pero con sintaxis compleja.
Hay libertad de tipos de datos, eliminándose las barreras presentes en otros lenguajes.
Es un metalenguaje, un lenguaje que se utiliza para crear lenguajes específicos orientados al problema. Y también es una metaherramienta, una herramienta para crear herramientas.
Es creativo. Es una herramienta para explorar nuevas ideas.
No tiene mecanismos para crear estructuras más complejas como objetos, matrices, etc.
Características como sistema operativo:
Es multitarea y multiusuario.
Gestiona la memoria e incluye drivers para los dispositivos esenciales.
Incluye un intérprete y un editor.
Es extensible.
Al ser pequeño puede implementarse en RAM (memoria interna).
Las aplicaciones son extensiones del sistema operativo.
Smalltalk
El término “smalltalk” significa “conversación ligera, sin importancia”. Smalltalk es un sistema operativo y un lenguaje de programación orientado a objetos, desarrollado en Xerox PARC (Palo Alto Research Center) por un grupo de investigadores dirigido por Alan Key en los 1970’s. Como sistema unificado, elimina la distinción entre lenguaje de programación y sistema operativo. Smalltalk ha sido el primer lenguaje orientado a objetos verdaderamente popular, y ha ejercido una gran influencia en el desarrollo de otros lenguajes con orientación a objetos como Objetive-C, Actor, Java y Ruby.
La motivación para el desarrollo de Smalltalk fue crear un lenguaje humanista, que reflejase el modelo de la mente humana, incluyendo los aspectos creativo e interactivo.
La filosofía de Smalltalk es la siguiente:
Todo es un objeto, desde lo más simple (un número, una cadena de caracteres, un valor booleano, un mensaje, etc.) hasta lo más complejo (una clase). Los objetos son instancias de clases (que son objetos genéricos).
Los objetos se comunican mediante mensajes.
Los objetos encapsulan métodos (procedimientos) internos. Los mensajes entre objetos hacen referencia al método del objeto destinatario del mensaje.
El sistema es abierto, por lo que todo es modificable (el entorno de desarrollo, las estructuras de control, los objetos, las clases, los métodos, etc.), incluso la propia sintaxis.
Los programas (los objetos) generan al compilarse un código intermedio (bytecode). Una máquina virtual intermediaria interpreta este código y lo ejecuta.
Los tipos de datos son dinámicos, por lo que no es necesario definir tipos.
Un aspecto sorprendente es que las estructuras de control (if-then-else, for, while, etc.) no pertenecen al lenguaje, sino que están implementadas como objetos.
El sistema es extensible dinámicamente (es decir, en tiempo de ejecución) con nuevas clases y objetos.
Las primeras versiones de Smalltalk eran internas de Xerox. Smalltalk-80 fue la primera versión externa. Actualmente existen muchas versiones comerciales. También existe una versión gratuita (GNU Smalltalk). En 1997, Smalltalk se convitió en estandar ANSI.
Cedar
“Cedar” (en español, “cedro”) es un lenguaje y un sistema operativo desarrollado también en Xerox PARC como un entorno de investigación de programas experimentales.
El lenguaje es un superconjunto de Mesa (otro lenguaje de Xerox PARC), con tipos de datos dinámicos y un tipo de puntero universal.
El sistema operativo es una colección de módulos que comparten el mismo espacio de direcciones. No hay distinción entre módulos de usuario y del sistema. Está organizado en capas de módulos de diferentes niveles de abstracción:
La Máquina Cedar (la máquina virtual). Incluye hardware, microcódigo y las primitivas básicas para la ejecución del lenguaje. Los módulos de bajo nivel están disponibles para los módulos de las capas superiores, al contrario que en las máquinas virtuales convencionales, en las que cada capa se construye exclusivamente con la del nivel inmediato inferior.
El Núcleo. Entre los módulos de esta capa están: los visores (viewers), que son gestores de presentación para aplicaciones cooperativas; el TIP (Terminal Interface Processor) para gestión de la entrada; y módulos para gestión de llamadas remotas (RPC, Remote Procedure Call).
Life Support. Es el entorno de desarrollo y ejecución.
Utilidades de alto nivel.
El sistema operativo es monousuario, aunque soporta aplicaciones concurrentes. Aunque es abierto, se protege mediante el Safe Storage, que se sitúa justo encima de la máquina virtual.
UCSD Pascal
Es un lenguaje de desarrollo y un sistema operativo. Es independiente de la máquina. Es una versión interactiva de Pascal para ordenadores personales. Fue desarrollado en 1978 en el Institute for Information System de la Universidad de California San Diego (UCSD) bajo la dirección de Kenneth Bowles. Hasta entonces, Pascal (desarrollado por Niklaus Wirth en 1969 como evolución del Algol) solo estaba disponible en mainframes (grandes ordenadores) y funcionando en modo batch (proceso por lotes). UCSD Pascal contribuyó enormemente a la difusión de Pascal y tuvo una gran influencia en la evolución de los lenguajes de programación por sus nuevos conceptos, entre ellos:
La generación, al compilar, de un código neutro o pseudo-código (pseudo-code o p-code), para conseguir portabilidad, código que es interpretado por una máquina objeto. Esta filosofía fue adoptada posteriormente por Java.
La compilación por módulos separados, técnica adoptada posteriormente por muchos otros lenguajes.
Cadenas de caracteres (strings) de longitud variable.
El UCSD p-System fue un sistema operativo desarrollado con UCSD Pascal, basado en una máquina virtual o abstracta (independiente de la arquitectura de la máquina) llamada p-Machine. Fue muy popular en los años 1970s y 1980s. Fue uno de los tres sistemas operativos disponibles en el primer IBM PC (junto con PC-DOS y CP/M-86). IBM lo utilizó para su máquina DisplayWriter de proceso de textos.
Oberon
Oberon es un personaje de Shakespeare y un satélite de Urano. También es un lenguaje de programación y un sistema operativo (Oberon System). Su filosofía es la simplicidad y la unificación (lenguaje-sistema). Está orientado a componentes, es completamente abierto (como lenguaje y como sistema) y es, por lo tanto, extensible. Aunque el lenguaje puede usarse sin el sistema operativo, su máxima potencia reside cuando se usan juntos.
El lenguaje de programación, desarrollado por Niklaus Wirth en el Instituto de Tecnología de Zurich, es una evolución de Modula-2 (que, a su vez, es una evolución de Pascal), con influencias de Cedar y Smalltalk. El sistema operativo fue desarrollado por Wirth en colaboración con Jürg Gutknecht.
El llamado “proyecto Oberon” se lanzó en 1985. En 1992, Wirth y H. P. Mössenböck realizaron algunas adiciones al lenguaje original para crear el Oberon-2. En 1997, Oberon Microsystems, Inc. (un spinoff del Instituto) realizó algunas extensiones a Oberon-2 y lo denominó “Component Pascal”, con el objeto de expresar su filosofía de componentes y su origen (Pascal).
Características del lenguaje:
Es un lenguaje orientado a objetos.
Los tipos de datos son “fuertes”, como en Algol y Pascal. Pero son extensibles, es decir, se pueden crear nuevos tipos a partir de los existentes.
La programación es modular. Cada módulo se puede compilar de forma separada.
El lenguaje es extensible.
Características del sistema operativo:
Funciona sobre múltiples plataformas, sobre hardware “desnudo” (sin sistema operativo) o sobre un sistema operativo ya existente (Linux, MacOS o Windows).
Incluye un entorno de desarrollo de software y un entorno de ejecución (run-time).
Es monousuario y multitarea.
Es ligero y eficiente. El sistema operativo, incluyendo el editor y el compilador cabe en un solo disquete.
Se compone de un conjunto de módulos que comparten el mismo espacio de direcciones.
No hay diferencia entre un módulo del sistema y otro escrito por el usuario. Todo desarrollo en Oberon implica extender el sistema operativo.
La carga de los módulos es dinámica (se añaden al entorno de ejecución) y permanecen residentes hasta que se eliminan explícitamente.
Los comandos del sistema operativo son procedimientos que se pueden invocar como si fueran programas.
MUMPS
Es un sistema operativo, un lenguaje de programación y un sistema de gestión de base de datos. “Mumps” (en español, “paperas”) son las siglas de Massachusetts General Hospital Utility Multiprogramming System. Su nombre alternativo abreviado es M. Fue desarrollado por este hospital en 1960 para la gestión hospitalaria, pero se ha convertido en un lenguaje de propósito general. Es uno de los pocos lenguajes ANSI (junto con Cobol, Fortran y PL/I).
Características a destacar son:
Simplicidad. Es un lenguaje de "muy alto nivel", que permite desarrollar aplicaciones con gran facilidad. Dispone de un conjunto reducido, pero muy potente, de comandos, los cuales se pueden combinar sin ningún tipo de restricción.
Unificación variables-ficheros. No existen instrucciones específicas para grabar/leer datos en/de los dispositivos de almacenamiento. Los datos se almacenan en variables locales o globales. Estas últimas equivalen a los ficheros de los lenguajes tradicionales. Las variables locales son temporales (se eliminan al terminar la ejecución del programa) y las globales son permanentes.
La ventaja de este enfoque es que el manejo de variables es mucho más rico y flexible que las instrucciones clásicas de entrada/salida. De hecho, el lenguaje integra un sistema de Gestión de Base de Datos (SGBD), borrándose la barrera existente entre el lenguaje y el gestor de Base de Datos. El SGBD es bastante eficiente, gracias a que las variables se estructuran en forma de árbol.
Tipo único de datos. Es la secuencia de caracteres (string o cadena).
Estructura única, que es el vector: serie de datos relacionados contenidos en una variable, pero diferenciados por uno o más subíndices. Los subíndices puede ser cualquier tipo de dato. Por ejemplo, cliente("España", región, 4, 5.7)
Pueden existir todos los índices que se desee. Las posiciones de los índices representan niveles de un árbol (subíndices jerárquicos).
Los vectores permiten implementar Bases de Datos flexibles, con diferentes estructuras, incluyendo las jerárquicas y las relacionales.
Unificación código-datos. El lenguaje dispone de un mecanismo muy potente y flexible llamado “indirección”. Consiste en considerar el resultado de la evaluación de una variable como otra variable.
Es posible acceder a las líneas de comandos. Esta modificación dinámica del código en tiempo de ejecución elimina de cierta forma la distinción entre código y datos (como en Lisp).
Java
Es un lenguaje creado por Sun Microsystems. Está orientado a objetos y tiene soporte de concurrencia mediante threads (hebras). Un programa Java, al compilarse, produce un código neutro (independiente de la arquitectura de la máquina), que se llama “bytecode”.
La plataforma Java es un entorno abstracto de ejecución de aplicaciones Java, que es también independiente de la arquitectura de la máquina. Consta de una “máquina virtual Java” (Java Virtual Machine, JVM) y un conjunto de librerías de clases, que proporcionan los servicios necesarios (funciones, entrada/salida, acceso a redes, etc.). La JVM se ejecuta sobre un sistema operativo, interpretando el bytecode para convertirlo en instrucciones del procesador de la máquina. La JVM no está desarrollada en Java (se suele desarrollar en C).
La plataforma Java es extensible actuando sobre la librería de clases.
JavaOS es un sistema operativo desarrollado en Java y que funciona sobre una gran variedad de procesadores (Intel, PowerPC, etc.). Es más eficiente que una JVM.
Bibliografía
Sistemas operativos
Silberschatz, Abraham; Gagne, Greg; Galvin, Peter Baer. Fundamentos de sistemas operativos. McGraw-Hill / Interamericana de España, 2006.
Forth
Brodie, Leo. Thinking Forth. Punching Publishing, 2004. Disponible en Internet.
Brodie, Leo. Starting Forth: An Introduction to the Forth Language and Operating System for Beginners and Professionals. Prentice-Hall, Inc, Englewood Cliffs, NJ, 1981.
Hogan, Thom. Discover Forth. Learning and Programming the Forth Language. Osborne/McGraw Hill, 1982.
Forth, inc. http://www.forth.com
Smalltalk
Goldberg, A.; Robson, D. Smalltalk-80. The language and its Implementation. Addison-Wesley, 1983.
Liu, Chamon. Smalltalk, Objects, and Design. AuthorHouse, 2000.
Cedar
Lampson, Butler. A Description of the Cedar Language. Xerox PARC, CSL-83-15 (Dic. 1983).
Swinehart, D.; Zellweger, P.T.; Hangman, R.B. The Structure of Cedar. Sigplan Notices 20(7):230-244, Julio 1985.
Swinehart, D.; Zellweger, P.T.; Beach, R.J.; Hangman, R.B. A structural view of the Cedar programming environment. ACM Transactions on Programming Languages and Systems, 8(4):419-490, Oct. 1986.
Bowles, Kenneth. Beginner’s manual for the UCSD Software System. University of California, 1979.
Oberon
Fischer, André; Marais, Hannes. The Oberon Companion. A Guide to Using and Programming Oberon System 3. Auflage, 1998.
Mössenböck, H. Object-Oriented Programming in Oberon-2. Springer-Verlag, 1993.
Reiser, M. The Oberon System. User Guide and Programmer’s Manual. Addison-Wesley, 1991.
Reiser, M.; Wirth, N. Programming in Oberon. Steps beyond Pascal y Modula-2. Addison-Wesley, 1992.
Wirth, N.; Gutknecht, J. The Oberon System. Software - Practice and Experience. 19(9), 857-893, 1989.
Wirth, N.; Gutknecht, J. Project Oberon: The Design of an Operating System and Compiler. Addison-Wesley, 1993.
Wirth, N.; Gutknecht, J. Project Oberon. ACM Press, New York, NY, 1992.
MUMPS
Johnson, S.L. MUMPS and PASCAL. MUG Quarterley, vol. x, no, 4, pp, 8-10, 1980.
Martínez de Carvajal, Ernesto. El Lenguaje MUMPS. PPU, Promociones y Publicaciones Universitarias, S.A., Barcelona, 1993.
Munnecke, T.; Walters, R.F.; Bowie, J.; Lazarus, C.B.; Bridger, D.A. MUMPS: Characterístics and Comparations with Other Programming Systems. Medical Informatics, vol. 2, pp. 173-196, 1977.
Munnecke, T. From BASIC to MUMPS: Simplifying the Programmer's World. MUG Quarterly, vol. x, no. 4, pp. 10-12, 1980.
Walters, Richard F. ABCs of MUMPS. An Introduction for Novice and Intermediate Programmers. Digital Press, 1989.
Java
Arnold, Ken; Golling, James. The Java Programming Language. Addison-Wesley, 1996.
Goslig, James; Joy, Bill; Steele, Guy; Bracha, Gilad. Sun Microsystems. The Java Languaje Specification. Internet.
Lindhom, Tim; Yellin, Frank. Sun Microsystems. The Java Virtual Machine Specification. Internet, 1997.